第一次写这种大模拟题呢。。。觉得很考验码力和阅读理解能力,就写上了。
题意简述
给定一个带权的树,
定义:
- 点到路径的距离:中离最远的点的到的距离
- 一条路径的偏心距为:树上离路径最远的点到的距离
请找到一个路径,使得:
- 的所有点在这个树的直径上
- 中的边权和,给定
- 的偏心距最小
输出最小的偏心距。
思路
先说一下,这个题数据水甚,大概也是能过去的,只要顾着写就可以了,几乎不用考虑时间复杂度。
首先找到直径。然后在直径上枚举路径的两个端点,计算出这个路径的偏心距,更新答案即可。
几个细节:
- 偏心距就两遍更新一下
- 如果路径长度,那么及时,不要继续搜了(一个大优化)
- 适当使用以减少代码量,增加准确率(赛高!)
- 不要出现低级错误!!!(像我就写反了,还好我机智,要不然肝没了)
代码(与以前的题目不同,这个题目在于读代码)
1 | // luogu-judger-enable-o2 |